Skip to main content
Phong Nguyen
💬
0 discussions

Git Flow

I. Giới thiệu về mono-repo và poly-repo

1. Microservices

  • Để hiểu rõ tính chất và lựa chọn phù hợp giữa mono-repo và poly-repo, trước tiên chúng ta cần hiểu microservices là gì.
  • Khi bạn làm việc với một ứng dụng lớn như Gcalls. Hệ thống sẽ bao gồm rất nhiều thành phần khác nhau để vận hành. Lúc này chúng ta cần chia nhỏ ứng dụng thành nhiều thành phần nhỏ để dễ vận hành và quản lý.
  • Mono-repo và poly-repo là 2 cách phổ biến để lưu trữ, tổ chức và quản lý hệ thống của bạn trên Git Repository.

2. Mono-repo

2.1 Giới thiệu

  • Với Mono-repo bạn sẽ đặt microservices hoặc UI components hoặc share libraries... vào từng thư mục riêng lẽ trên cùng một Git repo.

2.2 Ưu điểm

  • Người mới có thể thấy tổng thể cấu trúc dự án.
  • Dễ dàng thiết lập môi trường development.
  • Dễ dàng cập nhật các dependency (microservices, components, libraries...) khi có thay đổi.

2.3 Nhược điểm

  • Phải config CI/CD cho từng thư mục riêng.
  • Vì tính chất liên kết chặt chẽ (tightly coupled dependency) giữa các thành phần, nên khó khăn trong việc quản lý các version hoặc những thay đổi có thể ảnh hưởng đến những phần khác.

3. Poly-repo

2.1 Giới thiệu

  • Với poly-repo thì ngược lại bạn sẽ đặt microservices hoặc UI components hoặc share libraries... trên từng Git repo riêng lẽ.

2.2 Ưu điểm

  • Dễ dàng config CI/CD.
  • Vì các dependency (microservices, components, libraries...) hoàn toàn độc lập nên dễ dàng quản lý version.
  • Khi thay đổi code ít ảnh hưởng đến các dependency khác trong hệ thống.

2.3 Nhược điểm

  • Người mới có thể gặp khó khăn thì phải close từng mã nguồn, kiểm tra branch.
  • Có thể tốn thời gian hơn khi setup môi trường trên local. Có thể phải mở nhiều terminal để chạy các service.
  • Khi các dependency khác thay đổi có thể bạn phải cài đặt lại thư viện (npm install) hoặc git submodule

II. Kết Luận

Trên đây là tổng quan về 2 cách tổ chức Git repository phổ biến. Qua đó bạn có thể hiểu hơn về cách tổ chức source code của hệ thống Gcalls.